import functools
import time
from log_manager import LogManager

class RetryError(Exception):
    """重试失败异常"""
    pass

def retry(max_retries=3, delay=1.0):
    """重试装饰器
    
    Args:
        max_retries: 最大重试次数
        delay: 重试延迟时间(秒)
    """
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            last_error = None
            for i in range(max_retries):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    last_error = e
                    LogManager.warning(
                        f"函数 {func.__name__} 执行失败 ({i+1}/{max_retries}): {str(e)}"
                    )
                    if i < max_retries - 1:
                        time.sleep(delay)
            raise RetryError(f"重试 {max_retries} 次后仍然失败: {str(last_error)}")
        return wrapper
    return decorator

class ErrorHandler:
    """错误处理器"""
    
    @staticmethod
    def handle_protocol_error(error):
        """处理协议错误"""
        LogManager.error(f"协议错误: {str(error)}")
        # 可以在这里添加特定的错误处理逻辑
        
    @staticmethod
    def handle_transfer_error(error):
        """处理传输错误"""
        LogManager.error(f"传输错误: {str(error)}")
        # 可以在这里添加特定的错误处理逻辑
        
    @staticmethod
    def handle_device_error(error):
        """处理设备错误"""
        LogManager.error(f"设备错误: {str(error)}")
        # 可以在这里添加特定的错误处理逻辑 